define(['jquery', 'bootstrap', 'backend', 'table', 'form'], function ($, undefined, Backend, Table, Form) {

    var Controller = {
        index: function () {
            // 初始化表格参数配置
            Table.api.init({
                extend: {
                    index_url: 'coursetable/coursetable/index',
                    add_url: 'coursetable/coursetable/add',
                    edit_url: 'coursetable/coursetable/edit',
                    multi_url: 'coursetable/coursetable/multi',
                    del_url: 'coursetable/coursetable/del',
                    table: 'fa_course_table',
                }
            });

            var table = $("#table");

            // 初始化表格
            table.bootstrapTable({
                url: $.fn.bootstrapTable.defaults.extend.index_url,
                queryParams: function (params) {
                    params.rel_type = Config.relType;
                    params.rel_id = Config.relId;
                    return params;
                },
                escape: false,
                pk: 'id',
                sortName: 'weigh desc,id desc', //要使排序生效，在前面添加 weigh desc, 并且数据表weigh字段不能全为0,controller里$list=...->order前再添加->order("weigh desc")
                columns: [
                    [
                        { checkbox: true },
                        { field: 'id', title: __('Id') },
                        { field: 'name', title: '课程表名称' },
                        { field: 'school_id', title: '学校' },
                        { field: 'ocation_id', title: '地点' },
                        { field: 'classes_id', title: '班级' },
                        { field: 'teacher_id', title: '老师' },
                        {
                            field: 'start_date',
                            title: '项目开始时间',
                            formatter: Table.api.formatter.datetime,
                            datetimeFormat: "YYYY-MM-DD"
                        },
                        { field: 'exclint_holidays', title: '排除国际假日' },
                        {
                            field: 'operate',
                            title: __('Operate'),
                            table: table,
                            events: Table.api.events.operate,
                            formatter: Table.api.formatter.operate,
                            buttons: [
                                {
                                    name: 'classplan',
                                    classname: 'btn btn-xs btn-info btn-click',
                                    icon: 'fa fa-user-friends',
                                    click: function (value, row, index) {
                                        fileter = encodeURIComponent('{"table_id":"' + row.id + '","relType":"school"}');
                                        op = encodeURIComponent('{"table_id":"=","relType":"="}');
                                        Backend.api.open('/coursetable/classplant?relType=school&table_id=' + row.id + '&filter=' + fileter + '&op=' + op + '&ref=addtabs', '班级参数设置', {
                                            area: ['90%', '90%'],
                                            offset: ['50px', '50px'],
                                            callback: function (data) {
                                                Layer.alert("接收到回传数据：" + JSON.stringify(data), { title: "回传数据" });
                                            }
                                        });
                                    }
                                }, {
                                    name: 'tableplan',
                                    classname: 'btn btn-xs btn-warning btn-click',
                                    icon: 'fa fa-calendar-alt',
                                    click: function (value, row, index) {
                                        fileter = encodeURIComponent('{"table_id":"' + row.id + '","relType":"school"}');
                                        op = encodeURIComponent('{"table_id":"=","relType":"="}');

                                        // 获取当前页面的infostep参数
                                        var urlParams = new URLSearchParams(window.location.search);
                                        var infoStep = urlParams.get('infostep');

                                        // 构建新的URL，如果有infostep参数则带上
                                        var newUrl = '/coursetable/autoplan?relType=school&table_id=' + row.id + '&filter=' + fileter + '&op=' + op + '&ref=addtabs';
                                        if (infoStep) {
                                            newUrl += '&infostep=' + infoStep;
                                        }

                                        Backend.api.open(newUrl, '排课', {
                                            area: ['90%', '90%'],
                                            offset: ['50px', '50px'],
                                            callback: function (data) {
                                                Layer.alert("接收到回传数据：" + JSON.stringify(data), { title: "回传数据" });
                                            }
                                        });
                                    }
                                }
                            ]
                        }
                    ]
                ]
            });
            
            // 绑定回收站按钮点击事件
            $(document).on('click', '.btn-recyclebin', function () {
                var url = $(this).data('url');
                var title = $(this).data('title');
                Backend.api.open(url, title);
            });

            // 检查URL参数并更新guideContent
            function updateGuideContentByUrlParam() {
                var urlParams = new URLSearchParams(window.location.search);
                var infoStep = urlParams.get('infostep');
                if (infoStep === '2') {
                    // 更新步骤信息为第2步：课程项目信息录入 - 2.3 课程/项目管理
                    $('.current-step-info h5').text('第2步：课程管理');
                    $('.current-step-info p').text('请在此页面点某项目的排课按钮');

                    // 更新进度条为51%完成，步骤7/12
                    $('.progress-bar').css('width', '58.33%'); // 7/12 = 58.33%
                    $('.progress-container .steps-list').parent().find('span:last-child').text('58.33% 完成');
                    $('.progress-container .steps-list').parent().find('span:first-child').text('步骤 7/12');

                    // 更新步骤项
                    $('.step-item .step-number').text('2.3');
                    $('.step-item strong').text('排课');
                    $('.step-item p').text('请在此页面点某项目的排课按钮');
                    $('.step-item button').text('点击相关项目的【排课】按钮进入下一步');
                    $('.step-item button').attr('data-target', '.fa-calendar-alt');

                    // 更新进度条宽度为51%
                    $('.progress-bar').css('width', '58.33%');
                    $('.progress-container span:last-child').text('58% 完成');
                } else if (infoStep === '5') {
                    // 更新步骤信息为第2步：课程项目信息录入 - 2.3 课程/项目管理
                    $('.current-step-info h5').text('第5步：课程事件管理');
                    $('.current-step-info p').text('请在此页面点某项目的排课按钮');

                    // 更新进度条为90%完成，步骤10/12
                    $('.progress-bar').css('width', '92%'); // 5/12 = 58.33%
                    // $('.progress-container .steps-list').parent().find('span:last-child').text('92% 完成');
                    // $('.progress-container .steps-list').parent().find('span:first-child').text('步骤 10/12');
                    $('#rait').text('92% 完成');
                    $('#step').text('步骤 10/12');
                    // 更新步骤项
                    $('.step-item .step-number').text('5');
                    $('.step-item strong').text('管理课程事件');
                    $('.step-item p').text('请在此页面点某项目的排课按钮');
                    $('.step-item button').attr('data-target', '.btn.btn-xs.btn-warning.btn-click');
                    $('.step-item button').text('点击相关项目的【排课】按钮进入下一步');


                    // 更新进度条宽度为51%
                    $('.progress-bar').css('width', '95.33%');
                    $('.progress-container span:last-child').text('95% 完成');
                } else if (infoStep === '9') {
                    // 更新步骤信息为第2步：课程项目信息录入 - 2.3 课程/项目管理
                    $('.current-step-info h5').text('第4步：课程事件管理');
                    $('.current-step-info p').text('请在此页面点某项目的排课按钮');
                    // 更新进度条为90%完成，步骤10/12
                    $('.progress-bar').css('width', '95%'); // 7/12 = 58.33%
                    $('#rait').text('95% 完成');
                    $('#step').text('步骤 11/12');
                    // 更新步骤项
                    $('.step-item .step-number').text('4.1');
                    $('.step-item strong').text('管理课程事件');
                    $('.step-item p').text('请在此页面点某项目的排课按钮');
                    $('.step-item button').attr('data-target', '.btn.btn-xs.btn-warning.btn-click');
                    $('.step-item button').text('请点击相关项目的【排课】按钮');

                    // 更新进度条宽度为51%
                    $('.progress-bar').css('width', '95.33%');
                    $('.progress-container span:last-child').text('95% 完成');
                } else {
                    $('.step-item button').attr('data-target', '.fa.fa-user-friends');
                }
            }

            // 页面加载时执行
            updateGuideContentByUrlParam();

            $('.step-item button').click(function () {
                target = $(this).attr("data-target");
                // 如果没有传入target参数，使用默认逻辑
                if (!target) {
                    target = '.btn-success'; // 改为更常见的按钮选择器
                }

                // 创建手指指针元素 - 使用更兼容的图标
                var cursor = $('<div id="animated-cursor" style="position: fixed; font-size: 30px; color: #ff4444; z-index: 99999; pointer-events: none; text-shadow: 2px 2px 4px rgba(0,0,0,0.5); transition: all 1s ease-in-out; background: rgba(255,255,255,0.9); border-radius: 50%; padding: 8px; box-shadow: 0 0 20px rgba(255,68,68,0.8);">👆</div>');
                $('body').append(cursor);

                // 添加更明显的闪亮动画样式
                if (!$('#blink-style').length) {
                    $('<style id="blink-style">@keyframes blink { 0% { opacity: 1; box-shadow: 0 0 30px rgba(255,68,68,1), 0 0 60px rgba(255,68,68,0.8); transform: scale(1.2); } 50% { opacity: 0.7; box-shadow: 0 0 15px rgba(255,68,68,0.6), 0 0 30px rgba(255,68,68,0.4); transform: scale(1.0); } 100% { opacity: 1; box-shadow: 0 0 30px rgba(255,68,68,1), 0 0 60px rgba(255,68,68,0.8); transform: scale(1.2); } } .highlight-target { animation: blink 1s infinite; border: 3px solid #ff4444 !important; background-color: rgba(255,68,68,0.1) !important; }</style>').appendTo('head');
                }

                // 获取触发按钮的位置作为起始点
                var triggerButton = $(this);
                var startX, startY;

                if (triggerButton.length > 0) {
                    var buttonOffset = triggerButton.offset();
                    startX = buttonOffset.left + triggerButton.outerWidth() / 2;
                    startY = buttonOffset.top + triggerButton.outerHeight() / 2;
                } else {
                    // 如果找不到触发按钮，使用页面左上角
                    startX = 100;
                    startY = 100;
                }

                // 设置初始位置
                cursor.css({
                    left: startX + 'px',
                    top: startY + 'px',
                    display: 'block'
                });

                // 添加初始闪烁效果
                cursor.addClass('highlight-target');

                // 查找目标元素
                var targets = [];
                $(target).each(function () {
                    var offset = $(this).offset();
                    if (offset && $(this).is(':visible')) {
                        // 修正位置计算 - 减去手指图标的偏移量
                        var cursorWidth = 46; // 手指图标的实际宽度 (30px字体 + 16px padding)
                        var cursorHeight = 46; // 手指图标的实际高度
                        targets.push({
                            element: $(this),
                            x: offset.left + $(this).outerWidth() / 2 - cursorWidth / 2, // 校准x轴位置
                            y: offset.top + $(this).outerHeight() / 2 - cursorHeight / 2 // 校准y轴位置
                        });
                    }
                });

                // 如果没有找到目标，查找页面中的其他按钮
                if (targets.length === 0) {
                    $('.btn').each(function () {
                        var offset = $(this).offset();
                        if (offset && $(this).is(':visible')) {
                            var cursorWidth = 46;
                            var cursorHeight = 86;
                            targets.push({
                                element: $(this),
                                x: offset.left + $(this).outerWidth() / 2 - cursorWidth / 2,
                                y: offset.top + $(this).outerHeight() / 2 - cursorHeight / 2
                            });
                            return false; // 只取第一个找到的按钮
                        }
                    });
                }

                // 如果还是没有找到目标，创建临时目标点
                if (targets.length === 0) {
                    var temp1 = $('<div class="temp-target" style="position: fixed; top: 300px; left: 400px; width: 100px; height: 40px; background: #007bff; color: white; text-align: center; line-height: 40px; border-radius: 5px; z-index: 9997;">目标按钮</div>');
                    $('body').append(temp1);

                    targets = [
                        { element: temp1, x: 427, y: 297 } // 调整临时目标的位置
                    ];
                }

                // 如果有目标元素，执行动画
                if (targets.length > 0) {
                    var firstTarget = targets[0];

                    // 延迟1秒后开始移动，让用户看到起始位置
                    setTimeout(function () {
                        // 移动手指到第一个目标的校准位置
                        cursor.css({
                            left: firstTarget.x + 'px',
                            top: firstTarget.y + 'px'
                        });

                        // 等待移动动画完成后，让所有目标闪亮
                        setTimeout(function () {
                            // 移除手指的闪烁效果
                            cursor.removeClass('highlight-target');

                            // 给所有目标添加闪亮效果
                            targets.forEach(function (target) {
                                target.element.addClass('highlight-target');
                            });

                            // 8秒后清理所有效果
                            setTimeout(function () {
                                // 移除闪亮效果
                                targets.forEach(function (target) {
                                    target.element.removeClass('highlight-target');
                                });

                                // 清理元素
                                cursor.remove();
                                $('.temp-target').remove();
                                $('#blink-style').remove();
                            }, 2000); // 8秒钟
                        }, 1000); // 等待移动动画完成
                    }, 500); // 延迟1秒开始移动
                } else {
                    // 如果没有目标，直接清理
                    setTimeout(function () {
                        cursor.remove();
                        $('#blink-style').remove();
                    }, 2000);
                }

            });

            var script = document.createElement('script');
            script.src = '/assets/js/backend/common/index.js';
            document.head.appendChild(script);
            // 为表格绑定事件
            Table.api.bindevent(table);
        },
        add: function () {
            // 初始化flatpickr的函数
            function initFlatpickr() {
                // 等待flatpickr加载完成
                var checkFlatpickr = setInterval(function () {
                    if (typeof window.flatpickr !== 'undefined') {
                        clearInterval(checkFlatpickr);

                        flatpickr('#c-exclint_day', {
                            mode: 'multiple',
                            dateFormat: 'Y-m-d',
                            enableTime: false,
                            defaultDate: [],
                            locale: typeof fp !== 'undefined' && fp.l10ns && fp.l10ns.zh ? 'zh' : 'default',
                            onChange: function (selectedDates, dateStr, instance) {
                                $('#c-exclint_day').val(dateStr);
                            }
                        });
                    }
                }, 100);

                // 超时处理
                setTimeout(function () {
                    clearInterval(checkFlatpickr);
                }, 10000);
            }

            // 加载flatpickr
            if (typeof window.flatpickr === 'undefined') {
                var script = document.createElement('script');
                script.src = '/assets/js/backend/common/flatpickr.js';
                document.head.appendChild(script);

                // 监听flatpickr加载完成事件
                window.addEventListener('flatpickrLoaded', function () {
                    // 加载中文语言包
                    var zhScript = document.createElement('script');
                    zhScript.src = '/assets/js/backend/common/zh.js';
                    zhScript.onload = function () {
                        initFlatpickr();
                    };
                    zhScript.onerror = function () {
                        initFlatpickr();
                    };
                    document.head.appendChild(zhScript);
                }, { once: true });
            } else {
                initFlatpickr();
            }

            var addScript = document.createElement('script');
            addScript.src = '/assets/js/backend/common/add.js';
            document.head.appendChild(addScript);

            Controller.api.bindevent();
        },
        edit: function () {
            // 获取当前课程表ID
            var table_id = Fast.api.query('ids');

            // // 检查是否已有正式排课记录
            // $.ajax({
            //     url: 'coursetable/coursetable/checkFormalSchedule',
            //     type: 'get',
            //     data: { table_id: table_id },
            //     dataType: 'json',
            //     success: function (res) {
            //         if (res.code === 1 && res.data.has_formal === true) {
            //             // 如果已有正式排课记录，显示警告并禁用提交按钮
            //             Layer.alert('该课程表已有正式排课记录，不能修改！请先清除正式排课记录后再进行修改。', {
            //                 icon: 2,
            //                 title: '警告'
            //             }, function (index) {
            //                 // 关闭当前窗口
            //                 var index = parent.Layer.getFrameIndex(window.name);
            //                 parent.Layer.close(index);
            //             });
            //
            //             // 禁用所有表单元素
            //             $('form input, form select, form textarea').attr('disabled', 'disabled');
            //             $('form button[type="submit"]').addClass('disabled').attr('disabled', 'disabled');
            //         }
            //     }
            // });

            // 初始化flatpickr的函数
            function initFlatpickr() {
                // 等待flatpickr加载完成
                var checkFlatpickr = setInterval(function () {
                    if (typeof window.flatpickr !== 'undefined') {
                        clearInterval(checkFlatpickr);

                        // 获取默认日期值
                        var defaultDateValue = '{$row.exclint_day}';
                        var defaultDates = [];

                        if (defaultDateValue && defaultDateValue !== '{$row.exclint_day}' && defaultDateValue.trim() !== '') {
                            if (defaultDateValue.includes(',')) {
                                defaultDates = defaultDateValue.split(',').map(function (dateStr) {
                                    return dateStr.trim();
                                }).filter(function (dateStr) {
                                    return dateStr.length > 0;
                                });
                            } else {
                                defaultDates = [defaultDateValue];
                            }
                        }

                        flatpickr('#c-exclint_day', {
                            mode: 'multiple',
                            dateFormat: 'Y-m-d',
                            enableTime: false,
                            defaultDate: defaultDates,
                            locale: typeof fp !== 'undefined' && fp.l10ns && fp.l10ns.zh ? 'zh' : 'default',
                            onChange: function (selectedDates, dateStr, instance) {
                                $('#c-exclint_day').val(dateStr);
                            }
                        });
                    }
                }, 100);

                // 超时处理
                setTimeout(function () {
                    clearInterval(checkFlatpickr);
                }, 10000);
            }

            // 加载flatpickr
            if (typeof window.flatpickr === 'undefined') {
                var script = document.createElement('script');
                script.src = '/assets/js/backend/common/flatpickr.js';
                document.head.appendChild(script);

                // 监听flatpickr加载完成事件
                window.addEventListener('flatpickrLoaded', function () {
                    // 加载中文语言包
                    var zhScript = document.createElement('script');
                    zhScript.src = '/assets/js/backend/common/zh.js';
                    zhScript.onload = function () {
                        initFlatpickr();
                    };
                    zhScript.onerror = function () {
                        initFlatpickr();
                    };
                    document.head.appendChild(zhScript);
                }, { once: true });
            } else {
                initFlatpickr();
            }

            var row = JSON.parse($('#row').val());
            var script = document.createElement('script');
            script.src = '/assets/js/backend/common/add.js';
            document.head.appendChild(script);

            Controller.api.bindevent();
        },
        // 回收站列表
        recyclebin: function () {
            // 初始化表格参数配置
            Table.api.init({
                extend: {
                    'dragsort_url': ''
                }
            });

            var table = $("#table");

            // 初始化表格
            table.bootstrapTable({
                url: '/admin/coursetable/coursetable/recyclebin',
                pk: 'id',
                sortName: 'id',
                columns: [
                    [
                        {checkbox: true},
                        {field: 'id', title: __('Id')},
                        {field: 'name', title: '课程表名称'},
                        {field: 'school_id', title: '学校'},
                        {field: 'ocation_id', title: '地点'},
                        {field: 'classes_id', title: '班级'},
                        {field: 'teacher_id', title: '老师'},
                        {
                            field: 'delete_time',
                            title: __('Deletetime'),
                            operate: 'RANGE',
                            addclass: 'datetimerange',
                            formatter: Table.api.formatter.datetime
                        },
                        {
                            field: 'operate',
                            width: '140px',
                            title: __('Operate'),
                            table: table,
                            events: Table.api.events.operate,
                            buttons: [
                                {
                                    name: 'Restore',
                                    text: __('Restore'),
                                    classname: 'btn btn-xs btn-info btn-ajax btn-restoreit',
                                    url: '/admin/coursetable/coursetable/restore',
                                    refresh: true
                                },
                                {
                                    name: 'Destroy',
                                    text: __('Destroy'),
                                    classname: 'btn btn-xs btn-danger btn-ajax btn-destroyit',
                                    icon: 'fa fa-times',
                                    url: '/admin/coursetable/coursetable/destroy',
                                    refresh: true
                                }
                            ],
                            formatter: Table.api.formatter.operate
                        }
                    ]
                ]
            });

            // 为表格绑定事件
            Table.api.bindevent(table);
        },
        api: {
            bindevent: function () {
                Form.api.bindevent($("form[role=form]"));
            },
            formatter: {//渲染的方法
                url: function (value, row, index) {
                    return '<div class="input-group input-group-sm" style="width:250px;"><input type="text" class="form-control input-sm" value="' + value + '"><span class="input-group-btn input-group-sm"><a href="' + value + '" target="_blank" class="btn btn-default btn-sm"><i class="fa fa-link"></i></a></span></div>';
                },
                ip: function (value, row, index) {
                    return '<a class="btn btn-xs btn-ip bg-success"><i class="fa fa-map-marker"></i> ' + value + '</a>';
                },
                status: function (value, row, index) {
                    //添加上btn-change可以自定义请求的URL进行数据处理
                    return '<a class="btn-change text-success" data-url="coursetable/coursetable/status" data-confirm="确认切换状态？" data-id="' + row.id + '"><i class="fa ' + (row.status == 0 || row.status == null ? 'fa-toggle-on fa-flip-horizontal text-gray' : 'fa-toggle-on') + ' fa-2x"></i></a>';
                },
                changeStatus: function (value, row, index) {
                    //添加上btn-change可以自定义请求的URL进行数据处理
                    return '<a class="btn-change text-success" data-url="coursetable/coursetable/coursetable/coursetable/changeStatus" data-confirm="确认切换状态？" data-id="' + row.id + '"><i class="fa ' + (row.status === 0 ? 'fa-toggle-on fa-flip-horizontal text-gray' : 'fa-toggle-on') + ' fa-2x"></i></a>';
                },
            },
            events: {//绑定事件的方法
                ip: {
                    //格式为：方法名+空格+DOM元素
                    'click .btn-ip': function (e, value, row, index) {
                        e.stopPropagation();
                        var container = $("#table").data("bootstrap.table").$container;
                        var options = $("#table").bootstrapTable('getOptions');
                        //这里我们手动将数据填充到表单然后提交
                        $("form.form-commonsearch [name='ip']", container).val(value);
                        $("form.form-commonsearch", container).trigger('submit');
                        Toastr.info("执行了自定义搜索操作");
                    }
                },
            }
        }
    };
    return Controller;
});